package conservare.dao;

import javax.persistence.EntityTransaction;

import conservare.modelo.banco.Banco;
import conservare.modelo.banco.CarteiraBoleto;
import conservare.modelo.banco.CarteiraBoletoPk;
import conservare.modelo.banco.Conta;
import conservare.modelo.banco.SequencialBoleto;

public class BancoDAO extends Dao {

	private static final long serialVersionUID = 8390937581245226156L;

	
	public Banco getBancoByNumero(String numeroBanco){
		return getPojo(Banco.class, "select a from Banco a where a.numeroDoBanco = ?1", numeroBanco);
	}
	
	
	public Conta getConta(String cpfCnpj, String numeroDoBanco, String numeroDaAgencia, String numeroDaConta){
		
		StringBuilder sql = new StringBuilder("");
		sql.append(" select a from Conta a ");
		sql.append(" where a.empresa.cpfCnpj.numero = ?1 ");
		sql.append("       and a.agencia.banco.numeroDoBanco = ?2 ");
		sql.append("       and a.agencia.numeroDaAgencia = ?3 ");
		sql.append("       and a.numeroDaConta = ?4 ");
		
		return getPojo(Conta.class, sql.toString(), cpfCnpj, numeroDoBanco, numeroDaAgencia, numeroDaConta);
	}

	public CarteiraBoleto getCarteira(Conta conta, Integer numCarteira, String modalidade){
		
		CarteiraBoletoPk carteiraPk = new CarteiraBoletoPk(conta, numCarteira, modalidade);
		return getPojo(CarteiraBoleto.class, carteiraPk);
		
	}
	
	public SequencialBoleto salvar(SequencialBoleto nossoNumeroBancario) {
		
		EntityTransaction transaction = getEm().getTransaction();
		transaction.begin();
		
		if(nossoNumeroBancario.getId() == null)
			getEm().persist(nossoNumeroBancario);
		else
			getEm().merge(nossoNumeroBancario);
		
		transaction.commit();
		
		return nossoNumeroBancario;
		
	}
	
	/*public Carteira getCarteira(String numeroBanco, Integer numeroDaCarteira){
		
		Banco banco = getBancoByNumero(numeroBanco);
		Carteira carteiraProcurada = null;
		
		if(banco != null && banco.getCarteiras() != null && banco.getCarteiras().size() > 0){
			for (Carteira carteira : banco.getCarteiras()) {
				if(carteira.getNumeroDaCarteira() == numeroDaCarteira){
					carteiraProcurada = carteira;
					break;
				}
			}
		}
		
		return carteiraProcurada;
	}*/
	/*
	public Carteira getCarteira(Banco banco, Integer codigoCarteira){
		return getCarteira(banco.getNumeroDoBanco() , codigoCarteira);
	}*/
	
	
	/*public Integer gerarSequencialNossoNumeroBancario(Carteira carteira){
		return ControleNossoNumeroBoleto.gerarSequencialNossoNumeroBancario(carteira);
	}*/
	
	/*public SequencialBoleto getNossoNumeroBancario(Carteira carteira){
		return getPojo(SequencialBoleto.class, "select a from ControlaNossoNumeroCarteira a where a.id = ?1 ", carteira.getId());
	}*/


	
}
